#ifndef __ALGO3__GRAFO__
#define __ALGO3__GRAFO__

#include <vector>
#include <cassert>
#include <algorithm>

typedef std::vector<int> vint;

class Grafo{
		public:
			//Crea un grafo dada su cantidad de nodos.
			Grafo(int nodos) : 
				adyacencia(nodos,std::vector<int>()),
				cnodos(nodos){}
			//Cantidad de nodos
			int nodos() const{
				return cnodos;
			}
			//Agrega el eje de inicio a fin.
			void agregarEje(int inicio, int fin){
				assert(inicio >= 0 && inicio < nodos());
				assert(fin >= 0 && fin < nodos());
				assert(inicio != fin);

				adyacencia[inicio].push_back(fin);
				adyacencia[fin].push_back(inicio);
			}
			//Devuelve los vecinos de un nodo.
			const vint & vecinos(int nodo) const{
				assert(nodo >= 0 && nodo < nodos());
				return adyacencia[nodo];
			}
		private:				
			//La representacion del grafo es por lista de adyacencia
			std::vector< vint > adyacencia;
			int cnodos;
};

#endif
